知って損はない、各言語のBNF定義 |
您所在的位置:网站首页 › bnf java › 知って損はない、各言語のBNF定義 |
プログラムの技術をワンランクアップさせるために必要なのは、正確なコンパイラの知識だと思います。 より正確にコンパイラを知るための入門として、BNFを知ることをおすすめします。 BNFとはBNF (Backus-Naur form) とは、バッカス・ナウア記法の略で、プログラミング言語の文法を定義するためによく使われます。 コンパイラを作成する際によく使われるyaccなども、BNFに近い記法を利用して文法を定義します。 例1:JavaのBNF定義説明するより、実際のBNFを見た方が良いと思います。 http://cui.unige.ch/isi/bnf/JAVA/ にJavaの文法をBNFで定義したものがありますが、例えば if文 (if statement) の定義 は次のようになっています。 下の図をぱっと見てわかると思いますが、これが正確なJavaのif文の定義です。 -[ ... ]は省略可能を意味しています。 - expressionやstatementは別途定義されていて、ページの中のリンクをクリックすると定義に飛びます。 例2 : C言語のBNF定義https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of%20C%20in%20Backus-Naur%20form.htm こちらは前項のような可視化やリンクなどの補助がないので、より正確に読み取る必要があります。 C言語のif文(switch文も含む)は次のように定義されています。 ::= if ( ) | if ( ) else | switch ( ) まとめプログラミング言語の文法を定義する基本的な方法がBNFで、実用的にはBNFから派生した実用的な言語(yaccなど)が使われています。 BNFのほかにもオートマトンを使ったりもしますが、とりあえずBNFを押さえておけば役に立つと思います。 なお、BNFだけではコンパイラは成立せず、実際にはBNFなどの定義を元に、構文解析器を作る必要がありますので、その辺りも押さえておきたいところですね。 ![]() |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |